<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>

    <script>

        // js 中 代码分为同步和异步

        //   异步：定时器，ajax ，then

        //   异步：微任务和宏任务

        //    then 方法就是一个微任务


        // 微任务    ---  紧急任务



        // 事件轮询   event loop   
        //   1 所有的任务都会在主线程上，形成一个执行栈
        //   2 遇到异步任务就存在消息队列中(微任务队列和宏任务队列)
        //   3 当所有的同步任务执行完毕，主线程清空
        //   4 检查是否有需要立即执行的微任务，如果有就先进入主线程执行
        //   5 进入主线程之后又会出现新的同步和异步
        //   3 
        //   4
        //   5
        //   3
        //   4
        //   。。。


        // 每一次主线程清空以后，都去检查微任务队列，有没有要立即执行的


        // script  整体代码就是一个宏任务    宏任务是先执行的    


        const p = new Promise((resolve, reject) => {
            console.log(1);
            setTimeout(() => {
                resolve(5)
            }, 10)
            console.log(3);
        })


        setTimeout(() => {
            console.log(6);
            setTimeout(() => {
                console.log(7);
            }, 20)
        }, 0)

        p.then(res => {
            console.log(res);
        })








    </script>

</body>

</html>